

package com.hazelcast.spi.tenantcontrol;

import com.hazelcast.spi.annotation.Beta;

/**
 * Interface to be implemented by classes which can be queried for requirement
 * of a tenant context.
 */
@Beta
public interface Tenantable {

    /**
     * @return {@code true} when this object requires a tenant context to be set,
     * for example in order to resolve user classes, otherwise {@code false}.
     */
    boolean requiresTenantContext();

    /**
     * Retrieves the tenant control relevant for this given object. Tenant control
     * should already have been set up on this Hazelcast instance somehow, for
     * instance by calling {@link TenantControlFactory#saveCurrentTenant()} on a
     * user thread or should have been replicated from another Hazelcast instance.
     *
     * @return tenant control responsible for this object
     */
    TenantControl getTenantControl();
}
